package com.example.warehouse.sys.dao.persist.respository.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.example.warehouse.common.pojo.vo.PageData;
import com.example.warehouse.common.util.PageInfoToPageDataConverter;
import com.example.warehouse.sys.dao.persist.mapper.RoleMapper;
import com.example.warehouse.sys.dao.persist.respository.IRoleRepository;
import com.example.warehouse.sys.pojo.entity.SysRole;
import com.example.warehouse.sys.pojo.entity.SysUser;
import com.example.warehouse.sys.pojo.vo.SysRoleListItemVO;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import java.util.List;

@Slf4j
@Repository
public class RoleRepositoryImpl implements IRoleRepository {
    public RoleRepositoryImpl() {
        log.debug("创建存储用户对象: RoleRepositoryImpl");
    }

    @Autowired
    private RoleMapper roleMapper;

    /**
     * 新增角色
     *
     * @param role 角色
     * @return int
     */
    @Override
    public int insert(SysRole role) {
        log.debug("开始向用户表中插入数据, 参数: {}",role);
        return roleMapper.insert(role);
    }

    /**
     * 删除角色通过id
     *
     * @param id id
     * @return int
     */
    @Override
    public int deleteById(Long id) {
        log.debug("开始根据id删除用户数据, 参数: {}",id);
        return roleMapper.deleteById(id);
    }


    /**
     * 修改角色
     *
     * @param role 角色
     * @return int
     */
    @Override
    public int updateById(SysRole role) {
        log.debug("开始根据id修改用户数据, 参数: {}",role);
        return roleMapper.updateById(role);
    }

    /**
     * 通过名字查询
     *
     * @param name 名字
     * @return int
     */
    @Override
    public int countByName(String name) {
        QueryWrapper<SysRole> wrapper = new QueryWrapper<>();
        wrapper.eq("name",name);
        return roleMapper.selectCount(wrapper);
    }

    @Override
    public int countByNotIdAndName(Long id, String name) {
        QueryWrapper<SysRole> wrapper = new QueryWrapper<>();
        wrapper.ne("id",id).eq("name",name);
        return roleMapper.selectCount(wrapper);
    }

    /**
     * 通过id查询
     *
     * @param id id
     * @return int
     */
    @Override
    public int countById(Long id) {
        QueryWrapper<SysRole> wrapper = new QueryWrapper<>();
        wrapper.eq("id",id);
        return roleMapper.selectCount(wrapper);
    }

    @Override
    public SysRoleListItemVO roleById(Long id) {

        return roleMapper.roleById(id);
    }

    @Override
    public SysRoleListItemVO roleByName(String name) {
        return roleMapper.roleByName(name);
    }

    @Override
    public List<SysRoleListItemVO> list() {
        log.debug("开始显示角色列表用户数据");
        return roleMapper.list();
    }

    /**
     * 分页查询角色列表
     *
     * @param pageNum  页码
     * @param pageSize 每页显示条数
     * @return {@link PageData}<{@link SysRoleListItemVO}>
     */
    @Override
    public PageData<SysRoleListItemVO> list(Integer pageNum, Integer pageSize) {
        log.debug("开始执行【分页查询角色列表】的数据访问，页码：{}，每页记录数：{}", pageNum, pageSize);
        PageHelper.startPage(pageNum, pageSize);
        List<SysRoleListItemVO> list = roleMapper.list();
        PageInfo<SysRoleListItemVO> pageInfo = new PageInfo<>(list);
        PageData<SysRoleListItemVO> pageData = PageInfoToPageDataConverter.convert(pageInfo);
        return pageData;
    }

    @Override
    public List<SysRole> selectAll() {
        List<SysRole> list = roleMapper.selectList(null);
        return list;
    }

}
